MSSQL Alfabetische volgorde
Inleiding
De volgorde van de 26 letters is standaard en houdt geen rekening met hoofd- en kleine letters: A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z.
Veel talen, al gebruiken ze het Latijnse schrift, hebben aan deze 26 letters niet voldoende, en dan is de alfabetische volgorde niet universeel dezelfde. Zo worden de letters met diakritische tekens in Scandinavische talen na de Z gesorteerd maar in andere talen direct na de letter zonder diakritisch teken of samen met die letter.
Bij alfabetisch rangschikken door een computer wordt de volgorde door de gebruikte ASCII-tabel of door UTF rangschikking bepaald.
Sommige letters kunnen in een alfabetische volgorde een speciale plaats krijgen, zoals de Nederlandse ij die in sommige systemen, bijvoorbeeld telefoonboeken, als afzonderlijke letter wordt gebruikt. Hieronder zien hiervan een voorbeeld voor het Duits
Om de lijst van geldige alfabetische rangschikkingen te bekomen geef je in MS SQL het volgende statement in:
SELECT * FROM fn_helpcollations()
Dan krijg je een lijst als deze:
Voor het Latijnse alfabet zie je dat er al heel wat mogelijkheden zijn.
Als je een database creëert kan je de alfabetische volgorde bepalen:
In MS Sql:
create database JefInghelbrechtFrans
COLLATE French_CI_AI
Je kan achteraf de collation wel wijzigen:
ALTER DATABASE MyDatabase COLLATE French_CI_AS
Als je wilt weten welke de kenmerken van de alfbetische rangschikken zijn voer het hierboven statement uit:
Er bestaand een hele reeks collaties voor het Duits die rangschikken zoals in een telefoonboek:
Je kan de collatie per kolom in een tabel bepalen:
-- JI -- 4 december 2012 -- BoekenFamilienaamCollation.sql use JefInghelbrecht go -- natuurlijke orde select Voornaam, Familienaam from Boeken go -- niet de juiste volgorde, houdt rekening met accent select Voornaam, Familienaam from Boeken order by Familienaam go alter table Boeken alter column Familienaam vnarchar(200) collate Latin1_General_100_CI_AI; -- CI: case insensitive -- AI: accent insensitive go -- nu wordt er geen rekening gehouden met de accenten -- en is de lijst alfabetisch select Voornaam, Familienaam from Boeken order by Familienaam go
Om te weten te komen welke collation sequence actief is:
Om de 'collation' volgorde te kennen typ je de volgende instructie:
select serverproperty(N'collation') go
Opdracht
Als we de collation voor een kolom veranderen is dat slechts van toepassing op de nieuwe data die wordt toegevoegd. Wijzig de tabel Boeken zodat de bestaande data in de kolommen Voornaam, Familienaam en titel volgens de nieuwe collation volgorde geördend worden.
Schrijf minstens twee select statements die het verschil tussen AS en AI, en CS en CI illustreren.